Первая функция, с которой необходимо начинать изучение DAX является CALCULATE. Данная функция не имеет точного аналога в Excel, однако ее можно сравнить с функциями SUMIFS и COUNTIFS. Если коротко, то данная функция выполняет наложение фильтров на другие расчетные функции, тем самым мы можем отбирать и включать в расчеты только нужные нам данные.
=CALCULATE(<статистическое выражение>, <фильтр1>, <фильтр2>, …)
<статистическое выражение>
Выражение, которое должно нам вернуть число как результат вычисления (значение, а не таблицу). По этой причине в этом параметре часто используются статистические функции типа SUM, MIN, MAX, COUNTROWS и т.д.
<фильтр1>, <фильтр2> ...
Фильтр определяет диапазон данных над которыми нужно работать. Здесь указываются условия отбора значений. Как результат возвращает таблицу.
Предположим мы имеем следующую таблицу, которая называется Demo и загружена в PowerPivot.
Давайте на ее основе создадим сводную таблицу и подсчитаем количество записей для каждого продукта.
Теперь давайте создадим новое расчетное поле (меру) Count_All_Product в нашей сводной таблице, которое будет отображать общее количество записей напротив всех строк.
Каким образом мы получили в расчетном поле Count_All_Product цифры 16? Объяснение в том, что мы сняли для этого поля все фильтры, которые были применены в сводной таблице (каждая строка в сводной таблице это отдельный фильтр), с помощью функции ALL(). То есть, другими словами, функция ALL(Demo) дает команду снять все фильтры для расчетного поля Count_All_Product, которые применяются к таблице Demo.
Давайте добавим еще одно поле в строки, чтобы видеть какой была продажа каждого товара по городам.
Видим, что цифры в поле Count of Rows меняются, а в расчетном поле Count_All_Product - нет. Все правильно, поскольку для последнего мы сняли все фильтры в формуле. Теперь давайте внесем незначительные изменения в нашу формулу и посмотрим на результат.
=CALCULATE(COUNTROWS(Demo);ALL(Demo[Product]))
Мы изменили аргумент для функции ALL(), заменив Demo на Demo [Product]. Теперь фильтры будут сняты не для всей таблицы Demo, а только для ее столбца Demo[Product].
Таким образом мы видим, что на поле Count of Rows действуют фильтры Product и City, а на расчетное поле Count_All_Product только фильтр City.